import axios from 'axios'

import  pinia  from '@/pinia.js'
import { useTokenStore } from '@/stores/userTokenStore.js'
import { ElMessage } from 'element-plus'
import router from "@/router/index.js";
/**我的json格式
 * {
 *     "code": 200,
 *     "message": "操作成功",
 *     "data": []
 * }
 */
const request = axios.create({
    baseURL: 'http://localhost:8080', //  后端基础借口
    timeout: 10000 // 10秒
})

// 请求拦截器
request.interceptors.request.use(

    config => {
        const userToken=useTokenStore(pinia)
        let token = userToken.token;
        // token 认证等逻辑
        if (token) {
            console.log(token+"111")
            config.headers.Authorization = token
        }
        return config
    },
    error => {
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    response => {
        if(response.data.code === 202) {
            ElMessage.error(response.data.message)
        }
        if(response.data.code === 401) {
            ElMessage.error("用户登录过期,请重新登录")
            user.clearToken?.()  //清除token防止死循环
            router.push('/login')
            if (router.currentRoute.value.path !== '/login') {
                router.push('/login')
            }
        }


        return response; //  不要改成 response.data，否则 headers 丢失
    },
    error => {
        const status = error.response?.status
        if (status === 401) {
            user.clearToken?.()
            //等价于 if (user && typeof user.clearToken === 'function') {
            //   user.clearToken()
            // }
            if (router.currentRoute.value.path !== '/login') {
                router.push('/login')
            }
        }
        ElMessage.error(error.response?.data?.message || '请求失败')
        //	如果有 error.response.data.message，就显示这个消息（通常是后端返回的错误提示）
        // 	否则就用默认提示 '请求失败'
        return Promise.reject(error)
    }
)

export default request